CDH
Change Directory with History
Version 5.0
Dave Kruger
Copyright (C) 1990-1993 Dave Kruger
2 2
COPYRIGHT STATEMENT
===================
CDH Copyright (C) 1990-1993 by Dave Kruger.
All rights reserved.
CDH is free, but it is a copyrighted work and may be distributed only
pursuant to this license.
Permission is hereby granted to reproduce and disseminate so long as:
(1) No remuneration of any kind is received in exchange
(2) Distribution is without ANY modification to the contents of
CDH.EXE or the accompanying documentation.
No copy of CDH may be distributed without including a copy of this
license.
Any other use is prohibited without express, written permission in
advance.
DISCLAIMER
==========
The information contained in this document is subject to change
without notice. This software and documentation are provided free of
charge and without warranty of any kind. No responsibility is
accepted for errors contained in this documentation, or for
incidental or consequential damages in connection with the
furnishing, performance, or use of the software or documentation.
TRADEMARKS
==========
MS-DOS is a registered trademark of Microsoft Corporation.
Windows is a trademark of Microsoft Corporation.
Lotus and 1-2-3 are registered trademarks of Lotus Development
Corporation
Turbo C is a registered trademark of Borland International, Inc.
4DOS is a registered trademark of JP Software Inc.
UNIX is a registered trademark of UNIX System Laboratories Inc.
3 3
CONTENTS
========
Introduction.......................3
Installation.......................4
Synopsis...........................4
Description........................4
Options............................5
Environment Variables..............6
Examples...........................6
Enhancing Usability................7
4DOS and Aliases.................7
Batch Files......................8
Environment Variables............8
Hardware Requirements..............9
Diagnostics........................9
Bugs and Enhancements..............9
Version and History...............10
INTRODUCTION
============
This manual documents version 5.0 of the CDH (Change Directory with
History) utility.
CDH replaces CHDIR, the standard MS-DOS change directory command.
CDH provides similar functionality to CHDIR, but also includes a
directory history facility.
CDH maintains a record of the last 23 directories visited in a plain
text file called the history file. You can change to a directory in
the history file by referring to it by its numeric position in the
file, or by specifying any part of its name that differentiates it
from other directory names in the history file.
CDH also supports a CDPATH environment variable. If the wanted
directory is not a subdirectory of the current directory, the paths
in the CDPATH are searched to find the wanted directory.
CDH differs functionally from MS-DOS's CHDIR command as follows:
1. If you invoke CDH without an argument, it changes to the
directory specified by the HOME environment variable.
2. Unlike CHDIR, CDH changes directories across drives. For
example, if the current directory is C:\TMP, and you enter the
command CDH D:\TC, CDH changes the current directory to \TC and
also changes the current drive to D:. This is equivalent to
entering the two MS-DOS commands: CD D:\TC and D:.
3. CDH searches the CDPATH environment variable if the wanted
directory is not in the current directory.
4 4
INSTALLATION
============
The only installation necessary to use CDH is to copy the CDH.EXE
file to a directory in your PATH.
You can customise the installation by defining environment variables,
aliases, modifying COMMAND.COM, and so on; these are explained in the
ENHANCING USABILITY section below.
SYNOPSIS
========
CDH [
] [-?] [-H] [-L] [-V] [-] [-] [-]
DESCRIPTION
===========
The brackets in the synopsis above indicate that the argument is
optional, therefore, all arguments are optional. CDH takes a single
argument only, or no argument at all. There are two types of
arguments: minus (-) options and directory names. Arguments preceded
by a "-" cause the current directory to change depending on what
follows the "-". Anything else is assumed to be a directory name
that you want to change to. Case is not significant for any
argument; CDH sees no difference between -V and -v. Similarly, the
following s are treated identically: -SnEg, -SNEG, and -sneG.
If you invoke CDH without any arguments, it changes to the directory
specified in the HOME environment variable (if set) or to the root
directory on the current drive.
The last 23 directories visited are recorded, in plain text, in the
history file. You can specify the name of the history file with the
CDHISTFILE environment variable. If CDHISTFILE is not set (or is set
to an invalid path), the directory history is written to C:\CDHIST.
If you change to a directory that is not in the history file, CDH
inserts the new directory at position zero in the history file and
moves all existing directories up by one position. If the history
file already contains 23 entries, CDH inserts the new directory at
position zero in the history file, moves all existing directories up
by one position, and deletes the oldest directory from the history
file.
You can edit the history file with any text editor, for example, EDIT
or EDLIN. You might want to edit the history file, for example, to
delete entries for directories that no longer exist, or to delete
references to directories on floppy drives. The directory history is
stored in uppercase in the history file.
5 5
You can access a directory in the history file by referring to its
numeric position in the file, using - as an argument, for
example, CDH -15; or you can specify any part of a directory name
using - as an argument, for example, CDH -NEG. Note,
however, that s must be at least two letters long to avoid
confusion with other "-" options.
When you invoke CDH with a valid directory name () as an
argument, CDH changes to . can be in the current
directory or in any directory in the CDPATH.
OPTIONS
=======
Changes to directory . If does not exist in
the current directory, CDH searches the directories
specified in the CDPATH environment variable. If is
invalid after these searches, CDH prints an error message.
-? Prints a usage message like the synopsis above.
-H Prints an extended help message.
-L Lists the contents of the history file and the numeric
position of each entry in the file. This option is useful
to determine whether a particular directory is in the
history file, and to find its relative position. You can
then use CDH - to change to the directory if it is
in the history file (the - option is described
below).
-V Prints the version number of the CDH that you are using.
- Changes to the previous directory in the history file.
- Changes to the first directory in the history file that
contains anywhere in its path name. If no entry
contains , CDH prints an error message.
- Changes to the directory that is at the th
position in the history file. You can find out the
relative number of the directories in the history file by
using the -L option described above. If you enter a
number greater than that reported with the -L option, CDH
assumes that it is a , and searches the history
file for a directory that has in its path name.
6 6
ENVIRONMENT VARIABLES
=====================
By default, CDH calls the history file CDHIST, and creates it in the
root directory of the C drive. If you don't like these defaults, you
can set the CDHISTFILE environment variable to the path and file name
you prefer. If the value of CDHISTFILE is invalid, CDH uses the
default values.
When you invoke CDH with no arguments, it checks for the existence of
the HOME environment variable. If HOME is set to a valid path name,
CDH changes to that directory. If HOME is not set, CDH changes to
the root directory of the current drive. If HOME is set to an
invalid path, CDH prints an error message and the current directory
is not changed.
The CDPATH environment variable is a list of pathnames separated by
semicolons, similar to the standard MS-DOS PATH. If the directory
specified by a argument does not exist in the current
directory, CDH searches each directory in the CDPATH in turn and
changes to if it is found to be a subdirectory in any of them.
See below for an example of using the CDPATH.
The best place to set these environment variables is in your
AUTOEXEC.BAT file so they are set each time you boot your computer.
EXAMPLES
========
CDH -L Lists directories in the history file. The examples that
follow assume that this command reports the following:
3 D:\TC\INCLUDE
2 C:\USR\DAK\C
1 C:\TMP
0 C:\123\WKS
The examples also assume that the CDPATH environment
variable is set as follows:
CDPATH=C:\USR\DAK;D:\TC;C\
The current directory is C:\123\WKS.
CDH - This command changes to the C:\TMP directory.
7 7
CDH QUIN Assuming that QUIN is not a subdirectory of C:\TMP, CDH
searches the directories in the CDPATH and changes to
QUINCE, which is a subdirectory of C:\USR\DAK. A CDH -L
command would now report the following:
4 D:\TC\INCLUDE
3 C:\USR\DAK\C
2 C:\123\WKS
1 C:\TMP
0 C:\USR\DAK\QUINCE
CDH -In Changes to first directory in history file that contains
the pattern IN. The current directory would now be
D:\TC\INCLUDE. Note that case is not significant in search
patterns, and that the current directory is ignored in
history searches.
CDH -4 Changes to the fourth directory in the history list, that
is, C:\USR\DAK\C. (After the last example, entry zero in
the history file was D:\TC\INCLUDE, and all other entries
were moved up one position, therefore, C:\USR\DAK\C was
then entry four in the history file.)
ENHANCING USABILITY
===================
As pointed out above, installation is as simple as copying CDH.EXE to
a directory in the PATH. However, there are some things you can do
to enhance CDH's usability. None of these are necessary, but they
can make CDH even more useful.
4DOS and Aliases:
-----------------
4DOS, by JP Software, is a replacement for the standard MS-DOS
command processor, COMMAND.COM. It is the single most useful
enhancement you can apply to MS-DOS. While maintaining 100%
compatibility with COMMAND.COM, 4DOS provides many useful and
powerful enhancements. (4DOS, Version 5.0 does provide a directory
history function, but the history is lost at each reboot.) If you
don't have 4DOS yet, you should--it's the best thing to happen to
MS-DOS since hard disk support. (I don't have any affiliation with
JP Software. I am merely a very satisfied, registered user.)
4DOS provides an alias function that allows you to create your own
commands or to effectively change the names of existing commands. I
use the following 4DOS aliases with CDH:
ALIAS CD=C:\BIN\CDH
ALIAS B=C:\BIN\CDH -
ALIAS DL=C:\BIN\CDH -L
8 8
No matter how I try, I cannot get into the habit of typing CDH
instead of CD, hence the first alias above. "B" changes "Back" to
the previous directory; "DL" is mnemonic for "Directory List".
Several other programs provide an alias function, including ANARKEY
(where they are called AKAs), CED (synonyms), and the standard
MS-DOS utility, DOSKEY (macros). All three allow you to bypass the
internal CD command with an alias. Refer to the documentation that
comes with these products for information about defining aliases.
Batch Files:
------------
If you don't have access to an alias facility and you are using a
version of MS-DOS prior to 5.0, you can write small batch files to
provide the same functionality. The above three aliases can be
implemented in batch files as follows:
CD.BAT B.BAT DL.BAT
------ ----- ------
@echo off @echo off @echo off
c:\bin\cdh.exe %1 c:\bin\cdh.exe - c:\bin\cdh.exe -l
The problem here though, is that the CD command is internal to
COMMAND.COM, and will always be executed before CD.BAT. To
successfully implement CD.BAT you must use a binary editor to edit
COMMAND.COM and change CD to CX (or another two letters). You can
use FED (an excellent utility) to do this. Search for "CD" and look
for an occurrence that is near "CHDIR", "MKDIR", and "RMDIR". I'll
leave the details for you to figure out, but it's only an issue when
you want to use "CD" to refer to CDH and you don't have an alias
facility.
NOTE: IF YOU DECIDE TO ALTER COMMAND.COM, DO NOT OPERATE ON THE
ORIGINAL VERSION OF THE FILE. ALWAYS MAKE SUCH CHANGES ON
A COPY OF THE FILE ONLY.
Environment Variables:
----------------------
There are three environment variables of significance to CDH.
The HOME environment variable is useful if you are in the habit of
storing your personal files in subdirectories of a "home" directory
(I use C:\USR\DAK). Setting the HOME environment variable to this
directory provides the easiest way of returning to your work area.
The CDHISTFILE environment variable allows you to store the history
in a location other than the root directory of the C drive, and to
give the file a name of your choosing. (By the way, you might've
wondered why I chose "C:\CDHIST" and not just "\CDHIST" as the
default name for the history file. The answer is this: if I chose
"\CDHIST", CDH would create a history file in the root directory of
every drive you visited. By choosing "C:\CDHIST", there is only one
history file, regardless of the number of disk drives or partitions.)
9 9
By far the most powerful environment variable is CDPATH. This
provides an easy way to access subdirectories in a particular
directory tree. For example, you might prefer to install all your
Windows applications in a subdirectory of the WINDOWS directory, for
example, C:\WINDOWS\APPS. By including this directory in the CDPATH,
you can change to the application's directory by using its name only.
If you use a "home" directory, you could include it in the CDPATH
also. Finally, the root directory is another candidate for CDPATH.
Here is a command to set a typical CDPATH environment variable:
set CDPATH=C:\WINDOWS\APPS;C:\USR\DAK;C:\
With this command in effect, you could change to the Lotus 123 for
Windows directory (for example, C:\WINDOWS\APPS\123W) by typing:
CDH 123W.
HARDWARE REQUIREMENTS
======================
It is feasible to use CDH without a hard disk. Realistically,
however, a hard disk is the minimum requirement. If you do not have
a hard disk, or your hard disk is not drive C, you must use the
CDHISTFILE environment variable to specify the name of the history
file.
There is no real advantage in placing CDH.EXE in a RAM drive. It has
to access the hard disk to read the history file anyway, so there is
very little performance benefit. Placing the history file in the RAM
disk is also of little use, because you lose your directory history
each time you boot your computer.
DIAGNOSTICS
===========
CDH returns exit code 0 if the argument is valid or the directory
change is successful. Otherwise it prints a diagnostic message and
returns exit code 1.
BUGS AND ENHANCEMENTS
=====================
As far as I can tell, CDH is bug-free. However, I am always
interested in hearing about people's experiences. If you find a bug,
or have an enhancement request, please tell me about it. Write to:
Dave Kruger
PO Box 293
Bentleigh, 3204
Victoria, Australia
Internet: dak@hparc0.aus.hp.com
10 10
VERSION AND HISTORY
===================
Version 5.0, the current version, is the first released version.
Previous versions represented incremental implementation of the
version 5.0 functionality, or bug fixes resulting from beta testing.
The first fully working version was version 2.0, 20 March 1990.
CDH was written in Turbo C by Dave Kruger. It is based on a UNIX ksh
script written by an unknown author, but modified by Alan Barnes and
Tim Segall at Hewlett-Packard's Australian Software Operation.